﻿using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
/*g1.使用WPF编写一个简单的文件浏览器程序。
1）窗口分左右结构，包含菜单、工具栏、树形视图和列表；
2）展示用户目录及其下所有文件夹，点击左边树形视图中的文件夹，右侧列表可显示该文件夹中的子文件夹和文件；
3）对于txt文件，可以双击打开。
*/
namespace FileExplorer
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            // 初始化树形视图
            InitializeTreeView();
        }

       private void InitializeTreeView()
{
    try
    {
        // 获取用户目录
        var userDirectories = Directory.GetDirectories(@"C:\Users");
        
        foreach (var userDir in userDirectories)
        {
            // 检查是否有权限访问目录
            DirectoryInfo dirInfo = new DirectoryInfo(userDir);
            var subDirectories = dirInfo.EnumerateDirectories();
            string userName = Path.GetFileName(userDir);
            TreeViewItem userItem = new TreeViewItem() { Header = userName };
            treeView.Items.Add(userItem);
            
            // 添加用户目录下的文件夹
            foreach (var subDir in subDirectories)
            {
                string dirName = subDir.Name;
                TreeViewItem dirItem = new TreeViewItem() { Header = dirName };
                userItem.Items.Add(dirItem);

                // 显示文件
                var files = subDir.GetFiles();
                foreach (var file in files)
                {
                    ListViewItem fileItem = new ListViewItem() { Content = file.Name, Tag = file.FullName };
                    listView.Items.Add(fileItem);
                }
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error: " + ex.Message);
    }
}

        private void ListViewItem_MouseDoubleClick(object sender, RoutedEventArgs e)
        {
            // 双击打开txt文件
            if (listView.SelectedItem != null)
            {
                string filePath = (listView.SelectedItem as ListViewItem).Tag.ToString();
                if (File.Exists(filePath) && Path.GetExtension(filePath).Equals(".txt", StringComparison.OrdinalIgnoreCase))
                {
                    try
                    {
                        System.Diagnostics.Process.Start(filePath);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error: " + ex.Message);
                    }
                }
            }
        }
    }
}
